﻿/************************************************************************
** 文  件：
**	Stream.h
** 功  能：
**	RTSP视频流播放封装
** 作  者：
**	email:lixx2048@163.com
**  wechat:lixiang6153
**  QQ:941415509
** 日  期：
**	2024/03/15	14:00:00
** 说  明：
**	无
** 版  本：
**	2024/03/15	14:00:00		1.0		lixx2048@163.com
/************************************************************************/
#pragma once
#include <string>
#include <vector>
#include <thread>
#include <functional>
#include "opencv2/opencv.hpp"

// 视频回调
typedef std::function<int(std::string, int, int, int, cv::Mat&, void*)> VIDEOCB;
class Stream
{
public:
	Stream(std::string device);
	virtual ~Stream();

public:
	// 启动视频
	void Start(std::string url);
	// 关闭视频
	void Close();
	// 设置回调
	void SetCallback(VIDEOCB, void*);
	// 获取回调
	VIDEOCB GetCallback();
	// 获取上下文
	void* GetContext();

protected:
	// 设备编码
	std::string m_device;
	// 视频流地址
	std::string m_url;
	// 视频流回调
	VIDEOCB	m_call;
	// 识别上下文
	void*	m_contex;
	// 运行标志
	bool m_run;
	// 启动线程
	std::thread m_thread;
};

typedef std::shared_ptr<Stream> StreamPtr;